package com.hmall.item.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hmall.common.dto.Item;
import com.hmall.common.dto.PageDTO;
import com.hmall.item.mapper.ItemMapper;
import com.hmall.common.dto.Item;
import com.hmall.item.service.IItemService;
import lombok.extern.slf4j.Slf4j;
import com.hmall.item.util.RegexUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

@Service
@Slf4j
public class ItemService extends ServiceImpl<ItemMapper, Item> implements IItemService {
    @Autowired
    private ItemMapper itemMapper;

    @Override
    public Item itemById(Long id) {
        Item item = itemMapper.selectById(id);
        return item;
    }

    /**
     * 功能描述: java.lang.String
     * @return : 减少库存
     * @param id
     * @param num
     */
    @Override
    public String stockMinus(Long id,Long num) {
        itemMapper.stockMinus(id,num);

        return null;
    }

    /**
     * 功能描述: java.lang.String
     * @return : 添加库存数量
     * @param id
     * @param num
     */
    @Override
    public String stockAdd(Long id, Long num) {
        itemMapper.stockAdd(id,num);
        return null;
    }

    /**
     * 功能描述: 分页查询所有商品
     * @param page
     * @param size
     * @return : com.hmall.common.dto.PageDTO<com.hmall.item.pojo.Item>
     */
    @Override
    public PageDTO<Item> selectItemPage(int page, int size) {
        //创建分页构造器
        Page pageInfo = new Page(page, size);
        //创建条件构造器
        LambdaQueryWrapper<Item> lqw = new LambdaQueryWrapper<>();
        //添加条件
        lqw.orderByDesc(Item::getUpdateTime);
        Page itemPage = itemMapper.selectPage(pageInfo, lqw);
        //获取总条数
        long total = itemPage.getTotal();
        //获取当前页数据
        List pageRecords = itemPage.getRecords();

        //返回结果
        return new PageDTO<Item>(total, pageRecords);
    }

    /**
     * 功能描述:根据id查询商品
     * @param id
     * @return : com.hmall.item.pojo.Item
     */
    @Override
    public Item selectItemById(Long id) {
        return itemMapper.selectById(id);
    }
    /**
     * 功能描述: 新增商品
     * @param item
     * @return : void
     */
    @Override
    public void addItem(@RequestBody Item item) {
        itemMapper.insert(item);
    }


    /**
     * 功能描述: 商品上架下架
     * @param id
     * @param item
     * @return : void
     */
    @Override
    public void updatestatus(Long id, Item item) {
        LambdaQueryWrapper<Item> queryWrapper = new LambdaQueryWrapper<>();
        //Item::getId的意思相当于：
        //实例化一个Item对象，调用Item的get方法，这里调用getID，Item.getID()
        queryWrapper.eq(Item::getId,id);
        itemMapper.update(item,queryWrapper);
    }

    /**
     * 功能描述:修改商品
     * @param item
     * @return : void
     */
    @Override
    public void updateItem(Item item) {
        LambdaQueryWrapper<Item> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Item::getId,item.getId());
        itemMapper.update(item,queryWrapper);
    }

    /**
     * 功能描述:根据id删除商品
     * @param id
     * @return : void
     */
    @Override
    public void deleteId(Long id) {
        itemMapper.deleteById(id);
    }




}
